package com.goldenKey.common.component;

import com.goldenKey.common.constant.Constant;
import com.goldenKey.common.utils.JwtUtils;
import com.goldenKey.common.utils.RedisUtils;
import com.goldenKey.common.utils.StringTools;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;

/**
 * 缓存的一些辅助方法
 */
@Slf4j
@Component
public class RedisComponent {

    @Resource
    private RedisUtils redisUtils;

    /**
     * 生成缓存在Redis中的验证码key
     * @param captcha
     * @return
     */
    public String saveCaptchaKey(String captcha) {
        String captchaKey = StringTools.getRandomString(8);
        log.info("captcha:{}", captcha);

        redisUtils.setex(Constant.REDIS_KEY_CODE + captchaKey,
                captcha, Constant.REDIS_KEY_SURVIVAL_ONE_MIN);

        return captchaKey;
    }
    /**
     * 根据验证码key获取验证码
     * @param captchaKey
     * @return
     */
    public String getCaptcha(String captchaKey) {
        return (String) redisUtils.get(Constant.REDIS_KEY_CODE + captchaKey);
    }


    /**
     * 生成Token, 并缓存在Redis中(用户）
     * @param userLoginVo
     */
//    public void saveUserToken(UserLoginVO userLoginVo) {
//        String token = jwtUtils.createUserToken(userLoginVo.getUserId(), userLoginVo.getNickName());
//        userLoginVo.setToken(token);
//
//        // 设置token存活时间为 5天
//        userLoginVo.setExpireAt(System.currentTimeMillis() + Constant.KEY_SURVIVAL_ONE_DAY * 5);
//        redisUtils.setex(Constant.REDIS_KEY_TOKEN_USER + userLoginVo.getUserId(),
//                userLoginVo.getToken(), Constant.KEY_SURVIVAL_ONE_DAY * 5);
//    }

    /**
     * 生成Token, 并缓存在Redis中(管理员）
     * @param adminId
     * @param token
     */
    public void saveAdminToken(Integer adminId, String token) {
        // 设置token存活时间为 1天
        redisUtils.setex(Constant.REDIS_KEY_TOKEN_ADMIN + adminId,
                token, Constant.KEY_SURVIVAL_ONE_DAY);
    }

    /**
     * 生成Token, 并缓存在Redis中(用户)
     * @param userId
     * @param userToken
     */
    public void saveUserToken(String userId, String userToken) {
        // 设置token存活时间为 1天
        redisUtils.setex(Constant.REDIS_KEY_TOKEN_USER + userId,
                userToken, Constant.KEY_SURVIVAL_ONE_DAY);
    }

    /**
     * 根据用户id删除缓存中的token
     * @param userId
     */
    public void deleteUserToken(String userId) {
        redisUtils.delete(Constant.REDIS_KEY_TOKEN_USER + userId);
    }

    /**
     * 根据管理员账号删除缓存中的token
     * @param adminId
     */
    public void deleteAdminToken(Integer adminId) {
        redisUtils.delete(Constant.REDIS_KEY_TOKEN_ADMIN + adminId);
    }



    /**
     * 将分类树缓存
     * @param categoryVoList
     */
//    public void saveCategoryList(List<CategoryVo> categoryVoList) {
//        redisUtils.set(Constant.REDIS_KEY_CATEGORY_LIST , categoryVoList);
//    }

    /**
     * 获取缓存中的分类树
     * @return
     */
//    public List<CategoryVo> getCategoryList() {
//        return (List<CategoryVo>) redisUtils.get(Constant.REDIS_KEY_CATEGORY_LIST);
//    }




}
